code: function removeFromElement( element, keepDataAttrs ) {
  		var def = this._.definition,
  			attributes = def.attributes,
  			styles = def.styles,
  			overrides = getOverrides( this )[ element.getName() ],
  			// If the style is only about the element itself, we have to remove the element.
  			removeEmpty = CKEDITOR.tools.isEmpty( attributes ) && CKEDITOR.tools.isEmpty( styles );
  
  		// Remove definition attributes/style from the elemnt.
  		for ( var attName in attributes ) {
  			// The 'class' element value must match (#1318).
  			if ( ( attName == 'class' || this._.definition.fullMatch ) && element.getAttribute( attName ) != normalizeProperty( attName, attributes[ attName ] ) )
  				continue;
  
  			// Do not touch data-* attributes (#11011) (#11258).
  			if ( keepDataAttrs && attName.slice( 0, 5 ) == 'data-' )
  				continue;
  
  			removeEmpty = element.hasAttribute( attName );
  			element.removeAttribute( attName );
  		}
  
  		for ( var styleName in styles ) {
  			// Full match style insist on having fully equivalence. (#5018)
  			if ( this._.definition.fullMatch && element.getStyle( styleName ) != normalizeProperty( styleName, styles[ styleName ], true ) )
  				continue;
  
  			removeEmpty = removeEmpty || !!element.getStyle( styleName );
  			element.removeStyle( styleName );
  		}
  
  		// Remove overrides, but don't remove the element if it's a block element
  		removeOverrides( element, overrides, blockElements[ element.getName() ] );
  
  		if ( removeEmpty ) {
  			if ( this._.definition.alwaysRemoveElement )
  				removeNoAttribsElement( element, 1 );
  			else {
  				if ( !CKEDITOR.dtd.$block[ element.getName() ] || this._.enterMode == CKEDITOR.ENTER_BR && !element.hasAttributes() )
  					removeNoAttribsElement( element );
  				else
  					element.renameNode( this._.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' );
  			}
  		}
  	}
docs: Removes a style from an element itself, don't care about its subtree.