I an not aware of any discussions or recommendations on this subject, though I suspect many people had to decide on how to handle situations like this in their own code.

My approach has been the following. If the driver is intended as an example, I agree with Hans - all daughter Drivers should be added to the top level Driver. If the driver is designed as a tool to be used by many people who will never need to know what is inside, have access to intermediate objects, or change parameters of intermediate drivers, then those intermediate drivers can be added to the tool's master driver.

If I code a driver that produces a well defined result (like adding a certain object to the event record), and I suspect it might be added by multiple clients, I usually make its process(EventHeader) method check whether the driver has already been run.

One potential problem that is probably not an issue now but might become important as reconstruction jobs get more complex is preventing conflicts between multiple drivers trying to add identically named objects to the event record. May be BaseLCSimEvent should be modified to at least print a warning message if a user tries to put an object into it with a key that already exists.