This is one of the things you really should not be replacing. Unless you are writing your own compiler. Compiler knows how architecture works and can implement everything correctly. If you don't trust compiler, well then you have much bigger problem than stdargs.h.
Of course you can read manual for every architecture that you want to support, understand its C ABI, and implement this yourself. But compiler already does it for you - provides va_xxx compiler intrinsics in a same way how it provides SSE and other intrinsics. They are not part of C runtime library, they are part of compiler.
As for define - _M_IX86 and _M_AMD64. It's all in the documentation:
https://msdn.microsoft.com/en-us/library/b0084kay.aspx
For gcc/clang it is __i386__ and __x86_64__ for Intel architecture. For ARM it is __aarch64__ for 64-bit otherwise it is 32-bit.
This is a good site for predefined macros:
http://predef.sf.net