docs: function( definition ) {
  			var $ = definition.$,
  				baseClass = definition.base,
  				privates = definition.privates || definition._,
  				proto = definition.proto,
  				statics = definition.statics;
  
  			// Create the constructor, if not present in the definition.
  			!$ && ( $ = function() {
  				baseClass && this.base.apply( this, arguments );
  			} );
  
  			if ( privates ) {
  				var originalConstructor = $;
  				$ = function() {
  					// Create (and get) the private namespace.
  					var _ = this._ || ( this._ = {} );
  
  					// Make some magic so "this" will refer to the main
  					// instance when coding private functions.
  					for ( var privateName in privates ) {
  						var priv = privates[ privateName ];
  
  						_[ privateName ] = ( typeof priv == 'function' ) ? CKEDITOR.tools.bind( priv, this ) : priv;
  					}
  
  					originalConstructor.apply( this, arguments );
  				};
  			}
  
  			if ( baseClass ) {
  				$.prototype = this.prototypedCopy( baseClass.prototype );
  				$.prototype.constructor = $;
  				// Super references.
  				$.base = baseClass;
  				$.baseProto = baseClass.prototype;
  				// Super constructor.
  				$.prototype.base = function() {
  					this.base = baseClass.prototype.base;
  					baseClass.apply( this, arguments );
  					this.base = arguments.callee;
  				};
  			}
  
  			if ( proto )
  				this.extend( $.prototype, proto, true );
  
  			if ( statics )
  				this.extend( $, statics, true );
  
  			return $;
  		}