I got an MCP23017 16-bit i2c i/o expander working with the following:

i2cset -y 0 0x20 0x00 0x00 b

i2cset -y 0 0x20 0x01 0x00 b

i2cset -y 0 0x20 0x12 0x01 b

i2cset -y 0 0x20 0x13 0x20 b

These commands set port A and port B to all outputs, then turn on bit 0 of port A and bit 5 of port B.

I also was able to write to and read from a PICAXE 20X2 microprocessor set to act as an i2c slave with the first 128 bytes of its scratchpad memory acting like a 128-bit eeprom.

i2cdump -y -r 0-31 0 0x50 b

Shows first 32 bytes of scratchpad memory.

i2cset -y 0 0x50 0 0x61 b

Writes “a” to the first byte of scratchpad memory.