docs: function (element, options) {
  
  			var cls = this.constructor,
  				pluginname = cls.pluginName || cls.shortName,
  				arr;
  
  			if (!element) {
  				throw new Error('Creating an instance of a named control without passing an element');
  			}
  			// Retrieve the raw element, then set the plugin name as a class there.
              this.element = cls.convertElement(element);
  
  			if (pluginname && pluginname !== 'Control' && this.element.classList) {
                  this.element.classList.add(pluginname);
  			}
  
  			// Set up the 'controls' data on the element. If it does not exist, initialize
  			// it to an empty array.
  			arr = this.element[controlsSymbol];
  			if (!arr) {
  				arr = [];
  				this.element[controlsSymbol] = arr;
  			}
  			arr.push(this);
  
  			// The `this.options` property is an Object that contains configuration data
  			// passed to a control when it is created (`new can.Control(element, options)`)
  			//
  			// The `options` argument passed when creating the control is merged with `can.Control.defaults`
  			// in [can.Control.prototype.setup setup].
  			//
  			// If no `options` value is used during creation, the value in `defaults` is used instead
  			if (canReflect.isObservableLike(options) && canReflect.isMapLike(options)) {
  				for (var prop in cls.defaults) {
  					if (!options.hasOwnProperty(prop)) {
  						observeReader.set(options, prop, cls.defaults[prop]);
  					}
  				}
  				this.options = options;
  			} else {
  				this.options = assign( assign({}, cls.defaults), options);
  			}
  
  			this.on();
  
  			return [this.element, this.options];
  		}