I have tried creating map services by caching and setting a reference scale but the best way I have found to do this is to create a group layer and set scale ranges in ArcMap and then publish the service. the only problem is that you have to expand the layer list four times to see the symbols and all layers are listed. Maybe there is a better way? or a way to customize the layer list widget?
The only way I can think of getting around that is to hide the layer that are not visible due to scale in the layerlist widget. You know the enhancement I provided to grayout the layer title when out of scale instead some code could be added to set the css display:none; instead.