docs: function(json, onComplete) {
      if(this.busy) return;
      this.busy = true;
      
      var st = this.st,
          graph = st.graph,
          labels = json.label && $.splat(json.label),
          values = json.values,
          animate = this.config.animate,
          that = this;
      $.each(values, function(v) {
        var n = graph.getByName(v.label);
        if(n) {
          v.values = $.splat(v.values);
          var stringArray = n.getData('stringArray'),
              valArray = n.getData('valueArray');
          $.each(valArray, function(a, i) {
            a[0] = v.values[i];
            if(labels) stringArray[i] = labels[i];
          });
          n.setData('valueArray', valArray);
          var prev = n.getData('prev');
          if(prev) {
            var p = graph.getByName(prev);
            var valArray = p.getData('valueArray');
            $.each(valArray, function(a, i) {
              a[1] = v.values[i];
            });
            p.setData('valueArray', valArray);
          }
        }
      });
      this.normalizeDims();
      st.compute();
      st.select(st.root);
      if(animate) {
        st.fx.animate({
          modes: ['node-property:height:dimArray'],
          duration:1500,
          onComplete: function() {
            that.busy = false;
            onComplete && onComplete.onComplete();
          }
        });
      }
    }