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).