code: function mergeAncestorElementsOfSelectionEnds( range, blockLimit, startPath, endPath ) {
  			var walkerRange = range.clone(),
  				walker, nextNode, previousNode;
  
  			walkerRange.setEndAt( blockLimit, CKEDITOR.POSITION_BEFORE_END );
  			walker = new CKEDITOR.dom.walker( walkerRange );
  
  			if ( ( nextNode = walker.next() ) &&							// Find next source node
  				checkIfElement( nextNode ) &&								// which is an element
  				blockMergedTags[ nextNode.getName() ] &&					// that can be merged.
  				( previousNode = nextNode.getPrevious() ) &&				// Take previous one
  				checkIfElement( previousNode ) &&							// which also has to be an element.
  				!previousNode.getParent().equals( range.startContainer ) && // Fail if caret is on the same level.
  																			// This means that caret is between these nodes.
  				startPath.contains( previousNode ) &&						// Elements path of start of selection has
  				endPath.contains( nextNode ) &&								// to contain prevNode and vice versa.
  				nextNode.isIdentical( previousNode ) )						// Check if elements are identical.
  			{
  				// Merge blocks and repeat.
  				nextNode.moveChildren( previousNode );
  				nextNode.remove();
  				mergeAncestorElementsOfSelectionEnds( range, blockLimit, startPath, endPath );
  			}
  		}
docs: See rule 5. in TCs. Initial situation: <ul><li>AA^</li></ul><ul><li>BB</li></ul> We're looking for 2nd <ul>, comparing with 1st <ul> and merging. We're not merging if caret is between these elements.