docs: function offImpl( params ){
        var defaults = {
        };
        params = $$.util.extend({}, defaults, params);
        
        return function(events, selector, callback){
          var self = this;
          var selfIsArrayLike = self.length !== undefined;
          var all = selfIsArrayLike ? self : [self]; // put in array if not array-like
          var single = selfIsArrayLike ? self[0] : self;
          var eventsIsString = $$.is.string(events);
          var p = params;
  
          if( arguments.length === 0 ){ // then unbind all
  
            for( var i = 0; i < all.length; i++ ){
              all[i]._private.listeners = [];
            }
  
            return self; // maintain chaining
          }
  
          if( $$.is.fn(selector) || selector === false ){ // selector is actually callback
            callback = selector;
            selector = undefined;
          }
  
          if( eventsIsString ){ // then convert to map
            var map = {};
            map[ events ] = callback;
            events = map;
          }
  
          for( var evts in events ){
            callback = events[evts];
  
            if( callback === false ){
              callback = $$.define.event.falseCallback;
            }
  
            evts = evts.split(/\s+/);
            for( var h = 0; h < evts.length; h++ ){
              var evt = evts[h];
              if( $$.is.emptyString(evt) ){ continue; }
  
              var match = evt.match( $$.define.event.optionalTypeRegex ); // [type][.namespace]
              if( match ){
                var type = match[1] ? match[1] : undefined;
                var namespace = match[2] ? match[2] : undefined;
  
                for( var i = 0; i < all.length; i++ ){ //
                  var listeners = all[i]._private.listeners;
  
                  for( var j = 0; j < listeners.length; j++ ){
                    var listener = listeners[j];
                    var nsMatches = !namespace || namespace === listener.namespace;
                    var typeMatches = !type || listener.type === type;
                    var cbMatches = !callback || callback === listener.callback;
                    var listenerMatches = nsMatches && typeMatches && cbMatches;
  
                    // delete listener if it matches
                    if( listenerMatches ){
                      listeners.splice(j, 1);
                      j--;
                    }
                  } // for listeners
                } // for all
              } // if match
            } // for events array
  
          } // for events map
          
          return self; // maintain chaining
        }; // function
      }