Parece que encontrei uma maneira legal de fazer isso: em vez de definir variáveis em classes, é melhor criar modelos de nós apenas variáveis. Então, acabei com algo como seguir:
node basenode {
}
node linux_prod inherits basenode {
$relayhost="1.1.1.1"
$env = "prod"
}
node linux_qa inherits basenode {
$relayhost="2.2.2.2"
}
node linux_trunk inherits linux_qa {
$env = "trunk"
}
class base_linux {
# no valuables defined here
<...>
}
node trunk01 inherits linux_trunk {
$relayhost = "3.3.3.3" # I can override here for single node
include base_linux
}