public function changeDefinition(string $name, array $changes)
    {
        if (!isset($this->_definition[$name])) {
            throw new Exception('Definition for "' . $name . '" does not exist');
        }

        foreach ($changes as $prop => $val) {
            if ($val === null) {
                unset($this->_definition[$name][$prop]);
            } else {
                $this->_definition[$name][$prop] = $val;
            }
        }

        return $this;
    }