Does createrawtransction accept scriptPubKey and redeemScript as inputs? According to the built-in RPC documentation the signature for createrawtransaction is:
createrawtransaction [{"txid":"id","vout":n},...] {"address":amount,...}.

Gavin in his example on 2-of-3 multisigs is also passing scriptPubKey and redeemScript as input for createrawtransaction.

The code of createrawtransaction in bitcoin core for parsing inputs is:

 BOOST_FOREACH(const Value&amp; input, inputs) {
   const Object&amp; o = input.get_obj();
   uint256 txid = ParseHashO(o, "txid");
   const Value&amp; vout_v = find_value(o, "vout");
   if (vout_v.type() != int_type)
   throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, missing vout key");
   int nOutput = vout_v.get_int();
   if (nOutput &lt; 0)
   throw JSONRPCError(RPC_INVALID_PARAMETER, "Invalid parameter, vout must be positive");
   CTxIn in(COutPoint(txid, nOutput));
   rawTx.vin.push_back(in);
 }


so how exactly does createrawtransaction use scriptPubKey and redeemScript?
Yes, it accepts them (and any other parameters you care to specify in the JSON).  No, it doesn't use them---and I don't know why Gavin used them in his example.

There's a more detailed and more up-to-date example of spending a P2SH multisig output on the Bitcoin.org developer examples page.