docs: function(json) {
      if(this.busy) return;
      this.busy = true;
      
      var prefix = $.time(), 
          ch = [], 
          st = this.st,
          name = $.splat(json.label), 
          color = $.splat(json.color || this.colors),
          config = this.config,
          gradient = !!config.type.split(":")[1],
          animate = config.animate,
          horz = config.orientation == 'horizontal',
          that = this;
      
      for(var i=0, values=json.values, l=values.length; i<l; i++) {
        var val = values[i]
        var valArray = $.splat(values[i].values);
        var acum = 0;
        ch.push({
          'id': prefix + val.label,
          'name': val.label,
          'data': {
            'value': valArray,
            '$valueArray': valArray,
            '$colorArray': color,
            '$stringArray': name,
            '$gradient': gradient,
            '$config': config
          },
          'children': []
        });
      }
      var root = {
        'id': prefix + '$root',
        'name': '',
        'data': {
          '$type': 'none',
          '$width': 1,
          '$height': 1
        },
        'children': ch
      };
      st.loadJSON(root);
      
      this.normalizeDims();
      st.compute();
      st.select(st.root);
      if(animate) {
        if(horz) {
          st.fx.animate({
            modes: ['node-property:width:dimArray'],
            duration:1500,
            onComplete: function() {
              that.busy = false;
            }
          });
        } else {
          st.fx.animate({
            modes: ['node-property:height:dimArray'],
            duration:1500,
            onComplete: function() {
              that.busy = false;
            }
          });
        }
      } else {
        this.busy = false;
      }
    }