sinc,
Although there is great advice here, I must advise ronjonp that it's not all exactly correct. The biggest thing is that acad.lsp does, in fact, affect the first opened drawing (provided ACADLSPASDOC is set to 0) only, so any drawing specific variables will only be good for that first drawing. However, if you add a (command "undefine" "whatever"), that command will get undefined for the entire editing session, no matter which drawing you are in.
D'Oh! You're right of course. I was mixing up application namespaces with what I was saying. That's what I get for doing a fast-and-dirty post on my way to a meeting...
Next, I place ALL of my setup type & customization stuff in my own .lsp file that I call from mymenu.mnl. I do it this way so that when I upgrade or even just reinstall I know what I need to add to the new install to be back up and running in a minimal amount of time. All I have to do is menuload mymenu once and it will be loaded from then on out......plus I don't need to worry about the acad.lsp or acaddoc.lsp files being overwritten or duplicated by others.
And as I said in my reply to ronjonp in that other thread, I used to have problems with the StartUpSuite. More often than not I would not have my custom routines loaded. That was the big driving force for me to place all of my startup apps in the mnl file.....voila', no more problems
I see no real problem with this approach. The only thing to keep in mind is that your custom routines will only be loaded with your special menu. If this is the way you want it, then that's fine. But if there are other users on your system, they will not be able use the custom commands unless they load your menu. Putting "load" commands in acaddoc.lsp makes them available to all users on the system (depending on user path settings and which directory you place it in, of course).
Some Land Desktop, Civil, and Surveying commands (or at least portions of them) are loaded in mnl files. These features are not available if you create a user profile that does not load the appropriate menu. Careful thought here can help you if you want to create "special profiles" that don't load so much stuff on startup, but instead are tailored to specific tasks. This is "customization overkill" for most people (IMHO), but very useful for some. Something to keep in mind.
The only big thing (going back to what ronjump was talking about) is that if you create a custom setup lisp file like that and explicitely load it from your mnl file, it should have it's own name, and should not be called "acad.lsp" or "acaddoc.lsp". These filenames are reserved for special use by Autocad, and Autocad automatically looks for and loads them if found.
As to why your startup suite wasn't working when called from acaddoc.lsp, there could be a number of reasons... Answer is it SHOULD work, unless you are doing something wrong/inappropriately. This initialization takes place BEFORE drawing initialization is complete. Therefore you CANNOT do things like "undefine" here. You should also not create or delete entities here. Things that require a fullly-initialized drawing should be put in the STARTUP function as specified in the documentation.
I don't really feel your argument about loading in the MNL as protection against "bad users" holds any water. If some other user is going to get on your system and screw up the configuration because they don't know what they're doing, well, there isn't a whole lot you can do about that... A sufficiently-tenacious "bad user" can screw up pretty much anything. However, loading your custom Lisp in your MNL file because you like it that way and it seems to work best for you, well, that's a valid reason.