So puppet is actually doing the correct thing. The message "undefined 'expiry' from '...'" is trying to say that the property has been undefined/unset. I'm going to close this, since it's working as expected. Feel free to reopen and submit a pull request if you'd like to change it. The relevant code is in https://github.com/puppetlabs/puppet/blob/ba7ba7285ccfbb659c9ea6c52245508a8795df89/lib/puppet/property.rb#L206