docs: function( editor ) {
  			var genericDefinition = CKEDITOR.plugins.indent.genericDefinition;
  
  			// Register generic commands.
  			setupGenericListeners( editor, editor.addCommand( 'indent', new genericDefinition( true ) ) );
  			setupGenericListeners( editor, editor.addCommand( 'outdent', new genericDefinition() ) );
  
  			// Create and register toolbar button if possible.
  			if ( editor.ui.addButton ) {
  				editor.ui.addButton( 'Indent', {
  					label: editor.lang.indent.indent,
  					command: 'indent',
  					directional: true,
  					toolbar: 'indent,20'
  				} );
  
  				editor.ui.addButton( 'Outdent', {
  					label: editor.lang.indent.outdent,
  					command: 'outdent',
  					directional: true,
  					toolbar: 'indent,10'
  				} );
  			}
  
  			// Register dirChanged listener.
  			editor.on( 'dirChanged', function( evt ) {
  				var range = editor.createRange(),
  					dataNode = evt.data.node;
  
  				range.setStartBefore( dataNode );
  				range.setEndAfter( dataNode );
  
  				var walker = new CKEDITOR.dom.walker( range ),
  					node;
  
  				while ( ( node = walker.next() ) ) {
  					if ( node.type == CKEDITOR.NODE_ELEMENT ) {
  						// A child with the defined dir is to be ignored.
  						if ( !node.equals( dataNode ) && node.getDirection() ) {
  							range.setStartAfter( node );
  							walker = new CKEDITOR.dom.walker( range );
  							continue;
  						}
  
  						// Switch alignment classes.
  						var classes = editor.config.indentClasses;
  						if ( classes ) {
  							var suffix = ( evt.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ];
  							for ( var i = 0; i < classes.length; i++ ) {
  								if ( node.hasClass( classes[ i ] + suffix[ 0 ] ) ) {
  									node.removeClass( classes[ i ] + suffix[ 0 ] );
  									node.addClass( classes[ i ] + suffix[ 1 ] );
  								}
  							}
  						}
  
  						// Switch the margins.
  						var marginLeft = node.getStyle( 'margin-right' ),
  							marginRight = node.getStyle( 'margin-left' );
  
  						marginLeft ? node.setStyle( 'margin-left', marginLeft ) : node.removeStyle( 'margin-left' );
  						marginRight ? node.setStyle( 'margin-right', marginRight ) : node.removeStyle( 'margin-right' );
  					}
  				}
  			} );
  		}