I haven't tested the code, but I think it should be optimized for the most common usage, which is the basic Backbone syntax (string or function as the values of the events hash). 

I have the feeling that all this chained underscore processing will unnecessarily slow things down, no?

What about something like this:

1. in `normalizeUIKeys`, do a `_.each(hash)` and check if we have an array
2. if so, make the extra processing in a `normalizeHandlersArray` (which would be simpler now)