Does createrawtransaction have the ability to create a transaction with custom scripts?
Yes that is correct.

What you can do is:


listunspent
createrawtransaction with receiver:amount and your change:amount 

(make the amount differ to pay the fee) 



Take the raw hex transaction and use it with http://brainwallet.org/#tx to be able to edit in JSON format. Don't worry, when your done you can sign the raw transaction in your local client.

About scriptPubKey, that is a little harder, and you should only experiment with this on testnet. You can try to understand this transaction https://en.bitcoin.it/wiki/Script#Transaction_puzzle and also try to understand how the stack works by playing around with jsforth