docs: function(json, onComplete) {
      if(this.busy) return;
      this.busy = true;
      
      var sb = this.sb;
      var graph = sb.graph;
      var values = json.values;
      var animate = this.config.animate;
      var that = this;
      $.each(values, function(v) {
        var n = graph.getByName(v.label),
            vals = $.splat(v.values);
        if(n) {
          n.setData('valueArray', vals);
          n.setData('angularWidth', $.reduce(vals, function(x,y){return x+y;}));
          if(json.label) {
            n.setData('stringArray', $.splat(json.label));
          }
        }
      });
      this.normalizeDims();
      if(animate) {
        sb.compute('end');
        sb.fx.animate({
          modes: ['node-property:dimArray:span', 'linear'],
          duration:1500,
          onComplete: function() {
            that.busy = false;
            onComplete && onComplete.onComplete();
          }
        });
      } else {
        sb.refresh();
      }
    }