Setting key values in a pattern, or falling back to defaults

Pretty basic question, I suppose it was asked many times in different flavors, still I’m having hard time finding an answer on the forum.

I use Pdefs like SynthDefs: defining a pattern in a Pdef, but instead of playing it, I set it as source to an EventPatternProxy and play that instead. This way I can have multiple instances of a Pdef:

Pdef(\scale, Pbind(\degree, Pxrand((-7..7), inf)));

p = EventPatternProxy().source_(Pdef(\scale));
p.play

And it’s wonderful.

Now, I want to set some default values in a Pdef, and be able to change them from the EventPatternProxies:

// this doesn't work, obviously :)
Pdef(\scale, Pbind(\amp, 0.5, \degree, Pxrand((-7..7), inf)));
p.set(\amp, 0.2)

// this doesn't allow to set a default
Pdef(\scale, Pbind(\amp, Pkey(\amp), \degree, Pxrand((-7..7), inf)));

// this usually works, except in this case, since \amp can't be nil because it is defined as a Function by Event: 
Pdef(\scale, Pbind(\amp, Pfunc { |e| e[\amp] ? 0.5 }, \degree, Pxrand((-7..7), inf)));

// and of course I could set amp by composing afterwards:
p.source = Pbind(\amp, 0.1) <> Pdef(\scale)
// but many times I need that value to be used in Pdef(\scale) as well

Suggestions? Am I going for the wrong approach?
I’m thinking that it wouldn’t be off the purpose of Pkey to accept a default value, like:

Pdef(\scale, Pbind(\amp, Pkey(\amp, inf, 0.5), \degree, Pxrand((-7..7), inf)));
p.set(\amp, 0.2)

(or there could be another object that does this, if it’s not the case to touch Pkey)