code: function(ctx) {
  		var subCtx,
  			tree = ctx.tree,
  			node = ctx.node,
  			children = node.children,
  			opts = ctx.options;
  
  		// FT.debug("nodeRemoveChildren()", node.toString());
  		if(!children){
  			return;
  		}
  		if( this.activeNode && this.activeNode.isDescendantOf(node)){
  			this.activeNode.setActive(false); // TODO: don't fire events
  		}
  		if( this.focusNode && this.focusNode.isDescendantOf(node)){
  			this.focusNode = null;
  		}
  		// TODO: persist must take care to clear select and expand cookies
  		this.nodeRemoveChildMarkup(ctx);
  		// Unlink children to support GC
  		// TODO: also delete this.children (not possible using visit())
  		subCtx = $.extend({}, ctx);
  		node.visit(function(n){
  			n.parent = null;
  			tree._callHook("treeRegisterNode", tree, false, n);
  			if ( opts.removeNode ){
  				subCtx.node = n;
  				opts.removeNode.call(ctx.tree, {type: "removeNode"}, subCtx);
  			}
  		});
  		if( node.lazy ){
  			// 'undefined' would be interpreted as 'not yet loaded' for lazy nodes
  			node.children = [];
  		} else{
  			node.children = null;
  		}
  		this.nodeRenderStatus(ctx);
  	}
docs: Remove all descendants of ctx.node.
  @param {EventData} ctx