The purpose of :my-custom-storage is to uniquely identify the type of storage so that the different platforms can dispatch to the appropriate readers. It can be any arbitrary keyword that you want.
For example, when we add parquet storage, we use :parquet as the storage type [1]:
(raw/load$ location :parquet fields {:schema schema})
This informs pigpen that we want to load something using the parquet format, but pigpen doesn't have to know anything about that format yet.
To generate a pig script that loads parquet, we implement the appropriate multimethod that the script generation defines, using the parquet identifier [2]:
(defmethod pigpen.pig.script/storage->script [:load :parquet]
Once we do that, pigpen.pig/write-script now knows how to load parquet files.
The local / REPL is just another platform (like pig, cascading, rx), but it has a slightly different model for loading data, so we implement a different multimethod [3]:
(defmethod pigpen.local/load :parquet
And now we can load the parquet format in the REPL. The cascading platform doesn't implement its loader dispatch for :parquet, so if you were to try to load a parquet file & generate a cascading flow, you'd get a no such method exception.
So, to answer your question, you shouldn't have to define a local version of the loader if you only want to generate scripts; you would only require the pigpen.pig.script/storage->script implementation. You can choose to implement as many or as few platforms as makes sense for your scenario. If you don't implement the local version, it just won't work locally. If you've implemented the script multimethod & are getting that error when generating a script, send me a stack trace and I can figure out why it's happening.
And yeah, that gist is way out of date - sorry for the confusion there.
Let me know if that answers your question or if you had any other questions...
-Matt