I was talking to Steven Merrill who is also doing a lot of work on ESI, and we agreed that ESI should be a base module and that we should have sub-modules handle the actual interaction to the subsystem. An example of this would be that I am working on Panels ESI integration and I am having to duplicate some code that comes from the ESI module's blocks integration. I think we could refactor this so that we don't need to have blocks esi on if we are using panels.
For now, I feel like we should try to use the following methodology:
ESI - Base ESI functionality. Including URL structure and validation of private key. Ability for submodule to register a path for esi callback.
ESI Block - Module that uses the ESI functionality for blocks. Should respect Block Cache settings instead of using internal ESI settings.
ESI Panels - Module that allows panels to use ESI similar to blocks.
ESI Views - Module that allows views to integrate into ESI.
These are the ones I can think about off the top of my head. I wouldn't mind helping co-maintain this module as I am already working on Panels + Views for ESI, but I would like to see ESI refactored first so that I don't have to duplicate work and we can combine our work efforts.
Let me know what you think about this, and I'll provide patches asap.