The ID3v2 format is explain at www.id3.org. The most useful document is the ID3v2 v2.3.0 standard*. Note that all ID3v2 tag frames are written in Big Endian Byte order.
* Whilst this document has been superseded by v2.4.0 (see ID3v2 Developer Information) the earlier document is complete (rather than an update), and in indexed HTML form. As such, it represents a better technical introduction to ID3v2.
The ID3v2 standard defines a "tag" which is situated before the data in an mp3 file. The original ID3 (v1) tags resided at the end of the file, and contained a few fields of information. The ID3v2 tags can contain virtually limitless amounts of information, and new "frames" within the tags may be defined.
In the language of the ID3v2 standard document, a new frame is suggested, thus:
<Header for 'Replay Gain Adjustment', ID: "RGAD"> Peak Amplitude $xx $xx $xx $xx Radio Replay Gain Adjustment $xx $xx Audiophile Replay Gain Adjustment $xx $xx Header consists of: Frame ID $52 $47 $41 $44 = "RGAD" Size $00 $00 $00 $08 Flags $40 $00 (%01000000 %00000000)
In the RGAD frame, the flags state that the frame should be preserved if the ID3v2 tag is altered, but discarded if the audio data is altered.
I haven't tried this myself. Some example code for parsing ID3v2 tags is available here, which could easily be extended to write the above tag. Within-range Replay Gain data can contain the synchronisation code ($FF), so unsynchronisation may be necessary for this frame.
If you can see any problem with this proposal, please let me know. No software implements this (as yet).