well, many instances can share one listener port, however no instances should share the same port as is configured on the listener.
That is what I would expect, however the original config. (not done by me) was as above:
SQL 2017, Default instance: Instance port 1433, AG Listener port 1433
SQL 2016, Named instance: Instance port dynamic, AG Listener port 1433
Having discussed it with the customer I have just learned that the 2016 setup doesn't failover so I'm assuming because of the port conflict. As it turns out, although you get an "already in use" error when trying to use a conflicting port, it still actually applies it - you need to change it back to a non-conflicting one. It's not a hard stop error.
So they need to change the default instance port for 2017 to something other than 1433 (can you use dynamic for default instances - I hardly ever use default instances so cannot remember!!!), then all the listeners can use 1433. As applications will be connecting to the listener, those applications won't need to manually specify a non-standard SQL port.
As for DB names matching the listener names; the original setup has 1 listener for the entire instance, rather than a listener<>db relationship. So it looks like they created a dummy database which matches the name of the listener, for example:
Dummy db: DummyDB1
And when creating the first AG they've used this database and then created the listener to match the DB name. No other availability groups have a listener set.