IMO this is what an interface is for. Something I want to add. Every chef 'type' has a get/put  signature. There should some `chefer` interface. And other more specific unions of those interface for the types.  This may be far out of scope in the immediate, but. We should be preferring passing and returning interface implementations where we can. I think theres a lot of room for good abstractions in the library.

In the sense of the node struct and the chef Put the put method on that struct should filter those fields that are invalid then right ? I think this is a problem that comes up cause there are no interfaces, and there should be.  

In this case a good first step is probably an  interface per chef-object i.e. node/client/cookbook/etc. Then we might see the common method signatures across them, and can build the more basic 'chefer' interface.  Part of the work over in go-chef is to flesh out how a more interface-oriented api can be built up.