code: function(scale, dimension, resetFunct) {
  
      // Create a transparent proxy for functions needed by the d3 scale.
      d4.createAccessorProxy(dimension, scale);
  
      dimension.scale = function(val) {
        if (!arguments.length) {
          return dimension.accessors.scale;
        }
        dimension.accessors.scale = val;
        resetFunct();
        return dimension;
      };
    }
docs: /*!
  Unlike the other axis accessors the `scale()` is special because each d3 scale
  will have its own collection of functions, which may differ from one another
  Therefore, when setting the scale to something say from linear to ordinal
  we need to actually tell d4 to recreate the scale again otherwise the user
  may try to use scale specific methods that no longer apply, and will create
  an error down the road.
  
  Special Note: Because builders may define defaults for a given axis during
  the link function, it will also need to know if the property in question was
  set by the developer through the API. It is not enough to just check if the
  property has a value because some d3 properties will have default values.
  Therefore d4 applies a special $dirty flag to the function itself if the
  developer has changed its values.
  
  #### Example:
  
  var chart = d4.charts.column();
  var chartData = [{x:1,y:2}];
  chart.builder(function() {
  return {
  link: function(chart, data) {
  console.log(chart.x.domain.$dirty) // false;
  }
  }
  });