What about using a macro to define the common types? That would avoid the problem of having to visit each subtype declaration when more common fields are added. Is that good or bad style?
julia> macro STfields()
quote
a::Int
b::String
end
end
julia> abstract ST
julia> type MyST <: ST
@STfields
c
d
end
julia> names(MyST)
4-element Array{Symbol,1}:
:a
:b
:c
:d
