That's just dual stacking. You're dual stacked at the instant you have to decide to convert the packet header or not. At the end of the day you need a new packet format regardless, so you might as well clean it up in the process.
Fun fact, there is a canonical way to encode an IPv4 address in an IPv6 packet. It's used by 4to6 gateways. IPv6 address parsers understand when you pass them addresses that look like: 64:ff9b::192.168.0.1
If we convert an IPv4 datagram on the way up into the stack into the IPv4-64 format, and then just feed it to a single implementation of TCP or UDP or other protocol, I do not feel it is accurate to say that I we have two protocol stacks.
Fun fact, there is a canonical way to encode an IPv4 address in an IPv6 packet. It's used by 4to6 gateways. IPv6 address parsers understand when you pass them addresses that look like: 64:ff9b::192.168.0.1