code: function(recursive, callback) {
  		var i, l, node,
  			dict = {},
  			self = this;
  
  		$.each(NODE_ATTRS, function(i, a){
  			if(self[a] || self[a] === false){
  				dict[a] = self[a];
  			}
  		});
  		if(!$.isEmptyObject(this.data)){
  			dict.data = $.extend({}, this.data);
  			if($.isEmptyObject(dict.data)){
  				delete dict.data;
  			}
  		}
  		if( callback ){
  			callback(dict);
  		}
  		if( recursive ) {
  			if(this.hasChildren()){
  				dict.children = [];
  				for(i=0, l=this.children.length; i<l; i++ ){
  					node = this.children[i];
  					if( !node.isStatusNode() ){
  						dict.children.push(node.toDict(true, callback));
  					}
  				}
  			}else{
  //                dict.children = null;
  			}
  		}
  		return dict;
  	}
docs: Convert node (or whole branch) into a plain object.
  
  The result is compatible with node.addChildren().
  
  @param {boolean} recursive
  @param {function} callback callback(dict) is called for every node, in order to allow modifications
  @returns {NodeData}