code: def special(self, name, value=None, default=None):
  		
  
  		# Check the name is a string
  		if not isinstance(name, basestring):
  			raise TypeError('name must be a string')
  
  		# Check the name is valid
  		if not _specialName.match(name):
  			raise ValueError('special name must match "%s"' % _specialSyntax)
  
  		# If the value is not set, this is a getter
  		if value is None:
  
  			# Return the value or the default
  			try: return self._special[name]
  			except KeyError: return default
  
  		# Else, this is a setter
  		else:
  
  			# Can the value safely be turned into JSON
  			try:
  				JSON.encode(value)
  			except TypeError:
  				raise ValueError('value can not be encoded to JSON')
  
  			# Save it
  			self._special[name]	= value
docs: Special
  
  		Getter/Setter method for special values associated with nodes that are
  		not fields
  
  		To retrieve a value or values, pass only the name or names, to set a
  		single special value, pass a name and value
  
  		Args:
  			name (str): The name of the value to either set or get
  			value (mixed): The value to set
  				Must be something that can be converted directly to JSON
  			default (mixed): The default value
  				Returned if the special field doesn't exist
  
  		Returns:
  			On getting, the value of the special field is returned. On setting,
  			nothing is returned
  
  		Raises:
  			TypeError: If the name is not a valid string
  			ValueError: If the name is invalid, or if setting and the value can
  				not be converted to JSON