If something doesn't have a default, just omit it from your %defaults hash.
Or specify its value as undef (but not in qw(), since that would produce the string "undef").
But in the case of id, you are interpolating it in a string; what do you want there if it isn't provided? I'm guessing nothing, which you would accomplish by giving an empty string as the default (also not possible in qw()):
my %defaults = ( ..., 'id' => '', ... );
Your example doesn't use bootpw, so I'm not sure what you want for that.