Of course you can. Quoting the next.cpp driver:

Code:
static ADDRESS_MAP_START( next_mem, AS_PROGRAM, 32, next_state )
	AM_RANGE(0x00000000, 0x0001ffff) AM_ROM AM_REGION("user1", 0)
	AM_RANGE(0x01000000, 0x0101ffff) AM_ROM AM_REGION("user1", 0)
	AM_RANGE(0x02000000, 0x020001ff) AM_MIRROR(0x300200) AM_READWRITE(dma_ctrl_r, dma_ctrl_w)
	AM_RANGE(0x02004000, 0x020041ff) AM_MIRROR(0x300200) AM_READWRITE(dma_regs_r, dma_regs_w)
	AM_RANGE(0x02006000, 0x0200600f) AM_MIRROR(0x300000) AM_DEVICE8("net", mb8795_device, map, 0xffffffff)


Notice the 32-bit 68030/040 address space has both regular 32-bit handlers and an 8-bit wide Ethernet device. It's not a problem having handlers of multiple widths in one address space.

The 0xffffffff on the 8-bit device is a byte lane mask - in this case, they spent the extra gates so the 8-bit device appears at consecutive byte addresses in the 32-bit address space, but having the 8-bit device appear every 4th byte (in which case the mask would likely be 0x000000ff) is a cheaper, and therefore more common, scenario.

If you mean multiple width handlers at the same *address*, yes, that will blow up in your face.