def clean(self, value):
		"""Clean

		Goes through each of the values in the dict, cleans it, stores it, and
		returns a new dict

		Arguments:
			value {dict} -- The value to clean

		Returns:
			dict
		"""

		# If the value is None and it's optional, return as is
		if value is None and self._optional:
			return None

		# If the value is not a dict
		if not isinstance(value, dict):
			raise ValueError('value')

		# Init the return value
		dRet = {}

		# Go through each value and clean it using the associated node
		for k in value.keys():
			try:
				dRet[k] = self._nodes[k].clean(value[k])
			except KeyError:
				raise ValueError('%s is not a valid node in the parent' % k)

		# Return the cleaned values
		return dRet