After a big pause in my work in the field of 3D graphics, I'm back to Ogre with a lot more knowledge and a mission to write a game that just maybe won't turn out to be a dead end. Anyhow, one of the first things I need to do, after building a game framework, is to implement a deferred shading pipeline in Ogre. At first, I thought the deferred shading demo might turn out just to suit my needs, but unfortunately it didn't. The first thing I didn't like is the use of compositors which I want to avoid at all costs because they seem a little clumsy to me. The next thing is apparent inferior performance (I'm not sure, but I have an 8600GS and with OpenGL, at 1920x1080, no MSAA and no shadows, I can barely get 35 FPS in the demo) which could maybe be optimized. That said, I'd like to experiment a little and try to create my own deferred shading pipeline without compositors. (Maybe implement an alternate light pre-pass (aka deferred lighting) technique?)
Anyways, I'm still thinking a little bit on the details. Yeah, I'd have a DeferredPipeline class that could be 'attached' to a viewport to enable deferred shading on it. That would include duplicating the viewport onto the MRTs, setting the scheme to a G-buffer creation one and registering a scheme-not-found listener. So that means that the G-buffer creation phase would not be a problem to me. However, then I need to override the usual rendering process on the original viewport, i.e. to render only the light geometry and never render the scene itself. That is where I'm not sure what to do. I can register a RenderTargetListener and listen on the preViewportUpdate event and render the geometry there directly using the render system, avoiding any overhead that the SceneManager may impose on me. Binding a GPU fragment program and using Ogre::RenderSystem::_render with a premade light geometry vertex/index data should suffice. However, then I need to suppress the usual rendering onto the viewport. How am I supposed to do that? I can set a visibility mask to 0, but that wouldn't skip the rendering step wholly, the scene manager would still traverse the scene graph, discarding all renderables based on the mask, but is that necessary? Can't I just tell the viewport to stop the update operation? Am I missing something or asking a moronic question?
And of course, does something like this already exist? I haven't been able to find such a deferred shading pipeline using Google and forum search, but maybe I'm not searching well enough.
I plan on releasing this as a GPL plugin when (and if) I get something usable

Thanks for all your replies!