I know the scaling factor has to be a power of 2 like 1,2,4... but can it be a negative number like -4?
No. In machine code the scale is encoded as 2 bits (in a "SIB" byte, which also has 3 bits to determine the index register and 3 bit to determine the base register - there's no unused bits). The 2 scale bits are interpreted as a shift count (like << 0, << 1, << 2, << 3) which is essentially the same as a multiplier (like * 1, * 2, * 4, * 8).
I want to know if I could perform a multiplication to a register value directly.
The scale can't be used directly on a register. This kind of complexity was added to make accessing arrays fast/easy; and can only be used to determine an address (either for loading an address with the lea instruction, or for accessing memory).
There are other instructions that do a multiplication to a register value though (shifts, mul, imul, and aad for general/integer registers, plus more for floating point and SIMD registers). If you want to do a "fused multiply and add" then your choices are aad (which is 8 bits where the multiplier has to be a constant), lea, and SIMD extensions.
subq -4 * %rdi, %rsi
In theory; it would be possible to invent a new assembly language for 80x86 machine code (in the same way that AT&T invented an assembly language for 80x86 that doesn't match Intel's assembly language); where the assembler can do whatever it likes (as long as it can convert its idea of "instructions" into machine language).
For example, a new assembly language could accept movq %rsi+%rdi*4, %rsi (and convert it to the machine code for leaq (%rsi, %rdi, 4), %rsi). In the same way, a new assembler could accept subq -4 * %rdi, %rsi (and convert it to the machine code for leaq (%rsi, %rdi, 4), %rsi) as long as no later instruction depends on the flags.