docs: function () {
  			var tree,
  				series = this,
  				i = 0,
  				parentList = [],
  				allIds = [],
  				key,
  				insertItem = function (key) {
  					each(parentList[key], function (item) {
  						parentList[""].push(item);
  					});
  				},
  				getNodeTree = function (id, i, level, list, points, parent) {
  					var children = [],
  						sortedChildren = [],
  						childrenTotal = 0,
  						val,
  						point = points[i],
  						nodeTree,
  						node,
  						insertNode,
  						name;
  					insertNode = function () {
  						var i = 0,
  							inserted = false;
  						if (sortedChildren.length !== 0) {
  							each(sortedChildren, function (child) {
  								if (node.val > child.val && !inserted) {
  									sortedChildren.splice(i, 0, node);
  									inserted = true;
  								}
  								i = i + 1;					
  							});
  						} 
  						if (!inserted) {
  							sortedChildren.push(node);
  						}
  					};
  
  					// Actions
  					if (point) {
  						name = point.name || "";
  					}
  					if (list[id] !== undefined) {
  						each(list[id], function (i) {
  							node = getNodeTree(points[i].id, i, (level + 1), list, points, id);
  							childrenTotal += node.val;
  							insertNode();
  							children.push(node);
  						});
  					}
  					val = pick((points[i] && points[i].value), childrenTotal, 0);
  					nodeTree = {
  						id: id,
  						i: i,
  						children: sortedChildren,
  						childrenTotal: childrenTotal,
  						val: val,
  						level: level,
  						parent: parent,
  						name: name
  					};
  					series.nodeMap[nodeTree.id] = nodeTree;
  					return nodeTree;
  				};
  			// Actions
  			// Map children to index
  			each(this.points, function (point) {
  				var parent = "";
  				allIds.push(point.id);
  				if (point.parent !== undefined) {
  					parent = point.parent;
  				}
  				if (parentList[parent] === undefined) {
  					parentList[parent] = [];
  				}
  				parentList[parent].push(i);
  				i = i + 1;
  			});
  			/* 
  			*  Quality check:
  			*  - If parent does not exist, then set parent to tree root
  			*  - Add node id to parents children list
  			*/  
  			for (key in parentList) {
  				if (parentList.hasOwnProperty(key)) {
  					if (key !== "") {
  						if (HighchartsAdapter.inArray(key, allIds) === -1) {
  							insertItem(key);
  							delete parentList[key];
  						}
  					}
  				}
  			}
  			tree = getNodeTree("", -1, 0, parentList, this.points, null);
  			return tree;
  		}