public function set($key, $value = null) {
        if (($default = Hash::extract($this->_defaults, $key)) !== null) {
            if (is_float($default)) {
                $value = (float) $value;

            } else if (is_numeric($default)) {
                $value = (int) $value;

            } else if (is_bool($default)) {
                $value = (bool) $value;

            } else if (is_string($default)) {
                $value = (string) $value;

            } else if (is_array($default)) {
                $value = (array) $value;
            }
        }

        $this->_data = Hash::insert($this->_data, $key, $value);

        return $this;
    }