Implementing a cross-browser event utility as an exercise
Your code looks ok. Nothing really jumps out at me except these two things:


Event handlers attached via attachEvent are executed in random order (Source: http://msdn.microsoft.com/en-us/library/ie/ms536343%28v=vs.85%29.aspx). You might want to create a shim to get older versions of Internet Explorer to execute event handlers in the order they were attached, which is something I believe jQuery does (or did).
Create a function that patches the event object for cross browser compatibility, so your event handlers do not have to constantly call myEvent.getEvent(e). This will prevent repeated code in your handlers.


You could create separate functions to attach events in the three different ways, and use feature detection to determine which one to use:

var myEvent = {
    init: function() {
        if (document.addEventListener) {
            this.addListener = this.addListenerStandard;
            this.removeListener = this.removeListenerStandard;
        }
        else if (document.attachEvent) {
            this.addListener = this.addListenerMSIE;
            this.removeListener = this.removeListenerMSIE;
        }
        else {
            this.addListener = this.addListenerOldSkool;
            this.removeListener = this.removeListenerOldSkool;
        }
    },

    listen: function(elements, event, handler) {
        elements = !helpers.isCollection(elements) ? [elements] : elements;

        for (var i = 0; i &lt; elements.length; i++) {
            this.addListener(elements[i], event, handler);
        }
    },

    stopListening: function(elements, event, handler) {
        elements = !helpers.isCollection(elements) ? [elements] : elements;

        for (var i = 0; i &lt; elements.length; i++) {
            this.removeListener(elements[i], event, handler);
        }
    },

    addListenerStandard: function(element, event, handler) {
        element.addEventListener(event, handler, false);
    },

    addListenerMSIE: function(element, event, handler) {
        element.attachEvent("on" + event, handler);
    },

    addListenerOldSkool: function(element, event, handler) {
        element["on" + event] = handler;
    },

    removeListenerStandard: function(...) { ... },

    removeListenerMSIE: function (...) { ... },

    addListenerOldSkool: function(...) { ... },

    addListener: null,

    removeListener: null
};

myEvent.init();


That way you won't be detecting the proper DOM method on each iteration of your loop.