code: func (a *AttributeDefinition) Merge(other *AttributeDefinition) *AttributeDefinition {
  	if other == nil {
  		return a
  	}
  	if a == nil {
  		return other
  	}
  	left := a.Type.(Object)
  	right := other.Type.(Object)
  	if left == nil || right == nil {
  		panic("cannot merge non object attributes") // bug
  	}
  	for n, v := range right {
  		left[n] = v
  	}
  	if other.Validation != nil && len(other.Validation.Required) > 0 {
  		if a.Validation == nil {
  			a.Validation = &dslengine.ValidationDefinition{}
  		}
  		for _, r := range other.Validation.Required {
  			a.Validation.Required = append(a.Validation.Required, r)
  		}
  	}
  	return a
  }
docs: // Merge merges the argument attributes into the target and returns the target overriding existing
  // attributes with identical names.
  // This only applies to attributes of type Object and Merge panics if the
  // argument or the target is not of type Object.