Hi,
Scale is a parameter that multiplies the existing exchange between two regions (which by default, if both Aex1 and Aex2 are positive, is the harmonic mean of the two exchange stiffnesses), it is just a prefactor that goes in front. You can set any value to scale that you want, it is completely arbitrary.
If you are trying to cancel out the Aex factor in existing exchange, you would want to normalize by the harmonic mean (But for Aex1=Aex2 as in the example, this will reduce down to just Aex). Also, note if you were to just use "Aex" in the script, this is not a float, but behind the scenes it is a region wise scalar type and it will error out. Aex.average() is just a way to get Aex=10e-12 in float form. it is the same value, 10e-12.
The full equation that mumax currently uses for exchange, if both values are positive, is given as( For a full discussion see this
PR ):

ext_scaleExchange sets the term S. So if you happened to be doing RKKY with two different Aex, or something similar where you wanted to cancel out the Aex prefactor, you would want to normalize to the harmonic mean. If Aex1=Aex2 as in the example, the harmonic mean reduces down to Aex. Note, you can also set the value of exchange between two regions directly to an arbitrary value using ext_Interexchange, instead of having to scale the existing exchange values.
Best,
Josh L.