I think your answers for 1-3 are almost always the only options. The two exceptions I can think of is you're just trying to default a value on a new record or if it's setting integration only attributes. On the integration side, you can define processing rules on your publish channel/enterprise service which allow you to skip records/objects or update them using SETVALUE rules. On the new record there's a variety of additional options (DB config default, application designer defaults, appfielddefaults table entry, etc.)
1 & 2 also have many different options as to how you can do it. Sometimes non-persistent attributes will be set by bean classes (UI java classes), sometimes by object classes, sometimes by attribute classes, etc. Though most of the time I'd suggest utilizing the initialize value automation script launch point on the attribute if you're doing something custom.
------------------------------
Steven Shull
------------------------------