You can't really subclass block definitions. The reason for this is that block definitions are mixins, not classes. There is, for example, no way to overwrite a colour property because the definition does not have a colour property. Instead, it has an init function that calls setColour to set the colour property on the block, and there's no way to magically reach inside the init function and change just the call to setColour.
Depending on how the code is written, it is also generally not possible to overwrite individual JSON properties. For example, the JSON objects used to define built-in blocks are written as object-literal arguments in calls to createBlockDefinitionsFromJsonArray (e.g. [1]), so there is no way to change them without overwriting core code. The only way this would work is if the JSON was defined in a publicly available object that you could override before it was passed to initJson or one of the functions used to define blocks.
Instead, the recommended way to modify existing block definitions is to copy them (and their block-code generators), make the changes you want, and add the definition to Blockly.Blocks.
Ronald Bourret
Technical Writer (Provided by Synergis)