docs: function( query, includeSelf ) {
  		var $ = this.$,
  			evaluator,
  			isCustomEvaluator;
  
  		if ( !includeSelf ) {
  			$ = $.parentNode;
  		}
  
  		// Custom checker provided in an argument.
  		if ( typeof query == 'function' ) {
  			isCustomEvaluator = true;
  			evaluator = query;
  		} else {
  			// Predefined tag name checker.
  			isCustomEvaluator = false;
  			evaluator = function( $ ) {
  				var name = ( typeof $.nodeName == 'string' ? $.nodeName.toLowerCase() : '' );
  
  				return ( typeof query == 'string' ? name == query : name in query );
  			};
  		}
  
  		while ( $ ) {
  			// For user provided checker we use CKEDITOR.dom.node.
  			if ( evaluator( isCustomEvaluator ? new CKEDITOR.dom.node( $ ) : $ ) ) {
  				return new CKEDITOR.dom.node( $ );
  			}
  
  			try {
  				$ = $.parentNode;
  			} catch ( e ) {
  				$ = null;
  			}
  		}
  
  		return null;
  	}