code: function(plugin) {
  		
  		var self = this;
  		
  		// getter
  		if (typeof plugin == 'string') {
  			
  			var pluginName = plugin,
  				p = null;
  			
  			// if the namespace is provided, it's easy to search
  			if (pluginName.indexOf('.') > 0) {
  				p = self.__plugins[pluginName];
  			}
  			// otherwise, return the first name that matches
  			else {
  				$.each(self.__plugins, function(i, plugin) {
  					
  					if (plugin.name.substring(plugin.name.length - pluginName.length - 1) == '.'+ pluginName) {
  						p = plugin;
  						return false;
  					}
  				});
  			}
  			
  			return p;
  		}
  		// setter
  		else {
  			
  			// force namespaces
  			if (plugin.name.indexOf('.') < 0) {
  				throw new Error('Plugins must be namespaced');
  			}
  			
  			self.__plugins[plugin.name] = plugin;
  			
  			// if the plugin has core features
  			if (plugin.core) {
  				
  				// bridge non-private methods onto the core to allow new core methods
  				self.__bridge(plugin.core, self, plugin.name);
  			}
  			
  			return this;
  		}
  	}
docs: Returns (getter) or adds (setter) a plugin
  
  @param {string|object} plugin Provide a string (in the full form
  "namespace.name") to use as as getter, an object to use as a setter
  @return {object|core}
  @protected