code: function(ctx, childNode) {
  		var idx,
  			node = ctx.node,
  			opts = ctx.options,
  			subCtx = $.extend({}, ctx, {node: childNode}),
  			children = node.children;
  
  		// FT.debug("nodeRemoveChild()", node.toString(), childNode.toString());
  
  		if( children.length === 1 ) {
  			_assert(childNode === children[0]);
  			return this.nodeRemoveChildren(ctx);
  		}
  		if( this.activeNode && (childNode === this.activeNode || this.activeNode.isDescendantOf(childNode))){
  			this.activeNode.setActive(false); // TODO: don't fire events
  		}
  		if( this.focusNode && (childNode === this.focusNode || this.focusNode.isDescendantOf(childNode))){
  			this.focusNode = null;
  		}
  		// TODO: persist must take care to clear select and expand cookies
  		this.nodeRemoveMarkup(subCtx);
  		this.nodeRemoveChildren(subCtx);
  		idx = $.inArray(childNode, children);
  		_assert(idx >= 0);
  		// Unlink to support GC
  		childNode.visit(function(n){
  			n.parent = null;
  		}, true);
  		this._callHook("treeRegisterNode", this, false, childNode);
  		if ( opts.removeNode ){
  			opts.removeNode.call(ctx.tree, {type: "removeNode"}, subCtx);
  		}
  		// remove from child list
  		children.splice(idx, 1);
  	}
docs: Remove a single direct child of ctx.node.
  @param {EventData} ctx
  @param {FancytreeNode} childNode dircect child of ctx.node