docs: function (symbol, x, y, radius, options) {
  
  		var obj,
  
  			// get the symbol definition function
  			symbolFn = this.symbols[symbol],
  
  			// check if there's a path defined for this symbol
  			path = symbolFn && symbolFn(
  				mathRound(x),
  				mathRound(y),
  				radius,
  				options
  			),
  
  			imageRegex = /^url\((.*?)\)$/,
  			imageSrc,
  			imageSize;
  
  		if (path) {
  
  			obj = this.path(path);
  			// expando properties for use in animate and attr
  			extend(obj, {
  				symbolName: symbol,
  				x: x,
  				y: y,
  				r: radius
  			});
  			if (options) {
  				extend(obj, options);
  			}
  
  
  		// image symbols
  		} else if (imageRegex.test(symbol)) {
  
  			var centerImage = function (img, size) {
  				img.attr({
  					width: size[0],
  					height: size[1]
  				}).translate(
  					-mathRound(size[0] / 2),
  					-mathRound(size[1] / 2)
  				);
  			};
  
  			imageSrc = symbol.match(imageRegex)[1];
  			imageSize = symbolSizes[imageSrc];
  
  			// create the image synchronously, add attribs async
  			obj = this.image(imageSrc)
  				.attr({
  					x: x,
  					y: y
  				});
  
  			if (imageSize) {
  				centerImage(obj, imageSize);
  			} else {
  				// initialize image to be 0 size so export will still function if there's no cached sizes
  				obj.attr({ width: 0, height: 0 });
  
  				// create a dummy JavaScript image to get the width and height
  				createElement('img', {
  					onload: function () {
  						var img = this;
  						centerImage(obj, symbolSizes[imageSrc] = [img.width, img.height]);
  					},
  					src: imageSrc
  				});
  			}
  
  		// default circles
  		} else {
  			obj = this.circle(x, y, radius);
  		}
  
  		return obj;
  	}