docs: function(type, data) {
              var handlers,
                  i,
                  len,
                  event = buildEventObject(type, data);
  
              // if there are handlers for the event, call them in order
              handlers = this._handlers[event.type];
              if (handlers instanceof Array) {
                  // @NOTE: do a concat() here to create a copy of the handlers array,
                  // so that if another handler is removed of the same type, it doesn't
                  // interfere with the handlers array
                  handlers = handlers.concat();
                  for (i = 0, len = handlers.length; i < len; i++) {
                      if (handlers[i]) {
                          handlers[i].call(this, event);
                      }
                  }
              }
  
              // call handlers for `all` event type
              handlers = this._handlers.all;
              if (handlers instanceof Array) {
                  // @NOTE: do a concat() here to create a copy of the handlers array,
                  // so that if another handler is removed of the same type, it doesn't
                  // interfere with the handlers array
                  handlers = handlers.concat();
                  for (i = 0, len = handlers.length; i < len; i++) {
                      if (handlers[i]) {
                          handlers[i].call(this, event);
                      }
                  }
              }
  
              return event;
          }