After doing some RPC function call tests with ImportMulti and ImportAddress, I feel confident answering my own question.
By way of example, suppose I want to import a watch-only address "1CxZZZREDACTEDYYYYREDACTEDxyzabcD1":
Using "ImportAddress":
bitcoin-cli importaddress 1CxZZZREDACTEDYYYYREDACTEDxyzabcD1 "Account XYZ" true
Using "ImportMulti":
bitcoin-cli importmulti '
[
{
"scriptPubKey" : { "address": "1CxZZZREDACTEDYYYYREDACTEDxyzabcD1" },
"timestamp" : 1510387200,
"label" : "Account XYZ"
}
]' '{ "rescan": true }'
Lessons Learned:
Label vs Account:
The "account" parameter in ImportAddress has the same effect as the "label" property in ImportMulti. They both just label the bitcoin address with friendly text (in my case, "Account XYZ").
Rescan and timestamp:
If you set "rescan" to true in ImportAddress, then it will rescan the entire blockchain from the beginning. However, if you set "rescan" to true using ImportMulti, then it will only rescan as far back as the earliest "timestamp" value in your list of JSON-encoded address objects. Note that I used the following Linux command to generate my timestamp value of 1510387200:
$ date -d "Nov 11 2017" +%s
$ 1510387200
Summary:
You can use ImportMulti to perform the same operation as ImportAddress, knowing that in ImportMulti, the "label" property of each Import object means the same thing as the "account" parameter in ImportAddress. Further, ImportMulti is more powerful because you can specify each address's creation timestamp, which results in a much faster "rescan".
If anything I wrote here is wrong, please correct me.