I recently did something like this for Cisco. They needed a way for a sub-Application to invoke a method in another sub-Application, which might not be loaded. The solution was to derive the sub-Applications from a common base class and use the main Application as a broker. The broker listened to function invocation request events. Results of the method calls were made available by a custom event that was dispatched by the called method upon completion.
Here is a clue to how to implement this type of mechanism: the SWFLoader that loads a sub-Application has a property called content, which is actually the sub-Application's FlexGlobals.topLevelApplication once the sub-Application loads. Confused? I created a UML sequence diagram, a static object model diagram and a text narrative to document how the mechanism worked. Anyone else attempting something similar is well advised to do the same. Mike