Report as inappropriate

Well, we're just going to disagree on heated beds and PWM.

As to X3G and SF, X3G is what SF uses. It gives it a slight performance kick, not having to parse gcode. On the little AVRs, every bit helps. X3G can be made to support fan PWM by adding a new X3G command with that or extending the existing command. You'd then also modify GPX and SF to then support it. Not significantly different than the gcode case: you make a new M or G code, do what it takes to make the slicer use it, and then mod the firmware to recognize and support it.