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], "invalid single child");
  					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, "invalid child");
  				// Notify listeners
  				node.triggerModifyChild("remove", childNode);
  				// Unlink to support GC
  				childNode.visit(function(n) {
  					n.parent = null;
  				}, true);
  				this._callHook("treeRegisterNode", this, false, childNode);
  				// 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