docs: function(funcRef, args) {
  			var self = this;
  			args = args || [];
  			if (funcRef && funcRef.forEach) {
  				args = funcRef;
  				funcRef = null;
  			}
  			if (!args.forEach)
  				args = [args];
  			var doRun = function(node) {
  				//console.log("doRun : ", node)
  				var type = typeof funcRef;
  				if (!funcRef) {
  					if (node._deep_query_node_) {
  						if (typeof node.value !== "function")
  							return;
  						if (node.ancestor)
  							return node.ancestor.value[node.key].apply(node.ancestor.value, args);
  						else
  							return node.value.apply({}, args);
  					} else if (typeof node === 'function')
  						return node.apply({}, args);
  				} else if (type === 'function') {
  					if (node._deep_query_node_)
  						return funcRef.apply(node.value, args);
  					else
  						return funcRef.apply(node, args);
  				} else if (type === 'string') {
  					var tmp = node;
  					if (node._deep_query_node_)
  						tmp = node.value;
  					if (tmp[funcRef])
  						return tmp[funcRef].apply(tmp, args);
  					return node;
  				} else
  					return (node._deep_query_node_) ? node.value : node;
  			};
  
  			return self.done(function(s, e) {
  				if (!s)
  					return s;
  				if (s._deep_array_) {
  					var r = [];
  					for (var i = 0, len = s.length; i < len; ++i)
  						r.push(doRun(s[i]));
  					return deep.all(r);
  				} else
  					return doRun(s);
  			});
  		}