I looked at the engine code around createsUnitsList and it doesn't look like it will work.
The relevant code is in EndTurnDelegate.java.
} else if (!uaToCreate.getIsSea() && !uaToCreate.getIsAir() && t.isWater()) { toAddLand.addAll(ut.create(createsUnitsMap.getInt(ut), player)); ... if (!toAddLand.isEmpty()) { final Predicate<Territory> myTerrs = Matches.isTerritoryOwnedBy(player).and(Matches.territoryIsLand()); final Collection<Territory> landNeighbors = data.getMap().getNeighbors(t, myTerrs); if (!landNeighbors.isEmpty()) { final Territory location = getRandomTerritory(data, landNeighbors, bridge); createUnits(location, toAddLand, change, endTurnReport); } }So basically, for any land units that would be created at sea, we instead find a random neighboring land territory owned by the player and create the units there. No considerations for transports are given.
I suppose engine changes could be done to support different semantics, but given this whole line of thinking is already trying to workaround a different engine limitation - perhaps that one could be addressed directly, i.e. making unitPresence support each (either as a multiplication on top of each on directPresenceTerritories if both are used, or not allowing multiple each values on different options).
