Q:

Prevent drawing of overlapping point symbols - ArcGIS Server/Javascript API

Is there any way in ArcGIS to prevent symbols from being drawn when they overlap each other?  I know this is possible for Labels using Placement Properties/Label Weight, but I can't seem to find corresponding functionality for symbology.  The resulting map document will be published as an ArcGIS Server Map Service and displayed using the ArcGIS Javascript API.  The data will be updated frequently, thus the service must be drawn dynamically (no caching).
Basically, I have a point feature class that can be very dense or very sparse depending on zoom scale.  When zoomed out, there are too many symbols to display simultaneously in a coherent way.  In an ideal world, I'd like to be able to prevent cluttering by specifying a buffer distance (in pixels) around each symbol where no other symbols can be drawn from the same layer.  I don't want to cluster the symbols together - I only want to show a single point to represent the area.
My symbology is also fairly complex, and involves graduated symbols based on data value (as well as value-based rotation) as well as several labels with specific placement:

Short of thinning/downsampling the dataset before symbolizing, what are my options (if any) for reducing symbol density? 

A:

You might check out the following:

Disperse Markers tools for representations. (ArcInfo aka Advanced only)
Collect Events with rendering tool.
ESRI tech article 22695 using the ESRI label engine to offset overlapping point symbols
ArcObjects SDK point dispersal samples
ETGEowizards disperse points tool. (Paid version)
I've never tried this so it may be crazy, but if you make your point symbol invisible and only have a simple font character for its label, could you then use Maplex to set buffers, move the "labels" around, set weights, etc. 

A:

Since you're now talking about a web map service, a suggestion is to modify the Esri cluster script.
This script takes a series of point graphics and clusters those which are too close together to draw individually. By default it draws a large symbol to represent clusters of points.
You can modify this to show a single point instead of the cluster - but the script will have done the hard work of removing the extraneous points. It'll automatically work at various scales.
Note that this would probably require that you submit a query against the point layer, or use a feature layer (rather than a dynamic layer). This is so that you can obtain access to each of the points individually. You would then submit the collection of points to the clusterer as input. The output would be a "cluster layer" which is a modified graphics layer.

