It most certainly does not depend upon implementation. That is, if different implementations are handling it differently, one of them is doing it incorrectly.
If you go to decode unknown fields using a decoder that doesn't expect unknown fields, the decoding should fail. It will not skip over unknown fields.
There is, however, a way to provide for additional fields even before they are known. It is to employ the extension marker ("..."). Let's say that we develop various versions of an ASN.1 specification. Let's call them V1, V2, V3, etc. V1 is the original specification, but we understand at the time we design V1 that it's likely we'll have to modify it at some point. To allow this, instead of something like
Z ::= SEQUENCE { a INTEGER,
b OCTET STRING,
c Message1
}
we would declare Z to be extensible like this
Z ::= SEQUENCE { a INTEGER,
b OCTET STRING,
c Message1,
...
}
The extension marker says that, following c, there might be more fields which are as yet unknown. The decoder should treat messages containing such fields, as long as they follow c, as valid. The decoder would not be able to decode them since it doesn't know what they should be, but it knows that they are permissible.
Let's say that we update V1 to V2 by inserting two new fields somewhat like this
Z ::= SEQUENCE { a INTEGER, -- V1
b OCTET STRING, -- V1
c Message1, -- V1
...,
[[ d PrintableString, -- V2
e BOOLEAN ]] -- V2
}
In this case, the V1 version can interoperate with the V2 version. The V1 encoder would not include d or e, while the V2 encoder would include them. From the decoder's viewpoint, the V1 decoder would accept (but not decode) d and e, while the V2 decoder would decode d and e if they are found. So a V1 decoder would accept both V1 and V2 encodings, ignoring d and e whenever they are found; a V2 decoder would also accept both V1 and V2 encodings, noting that a V1 encoding would not include d or e, but it remains valid.
We can continue this through additional versions, for example,
Z ::= SEQUENCE { a INTEGER, -- V1
b OCTET STRING, -- V1
c Message1, -- V1
...,
[[ d PrintableString, -- V2
e BOOLEAN ]], -- V2
[[ f PrintableString, -- V3
g ExtensionMessage]] -- V3
}
where V1, V2, and V3 can all interoperate.
Note, however, that since we are dealing with a SEQUENCE, the order must be preserved. You could not have e without d, nor g without d, e, and f.
The conclusion is therefore that if your type definition includes extension markers, you may add new fields, but if it does not, you may not.