def special(self, name, value=None, default=None):
		"""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
		"""

		# 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