Hi,
I had an AhHa moment and I wanted to share this pattern. I think it could be formalized further as well, but it is working.
In one script's Awake() (any script really, it doesn't matter which object is set as the Generic Event Listener)...
UICamera.genericEventHandler = this.gameObject
Now
any script can subscribe to an event using UIEventListener with UICamera's static access to genericEventListener...
UIEventListener.Get(UICamera.genericEventHandler).onClick += this.OnClick;
In one script I also do a GameObject comparison with thefall-through gameObject to determine if I am getting a UI event or a fall-through event (because the genericEventHandler gets all events, including the fall-through).
If this is a valid workflow, I would highly recommend rolling this in to the core of nGUI. If necessary, nGUI could create a hidden GameObject to send Messages through and provide a reference for users (in addition to the genericEventHandler). It would only take a few minutes to implement this way. Perhaps it could be another method in the UIEventListener, or even an overload of Get(), when there is no argument.